package com.xique.park.service.biz.service.impl;

import com.alibaba.fastjson.JSONObject;
import com.xique.common.core.utils.SecurityUtils;
import com.xique.common.core.web.domain.AjaxResult;
import com.xique.park.bean.domain.ParkCarMngtype;
import com.xique.park.bean.domain.ParkGarage;
import com.xique.park.bean.domain.ParkLane;
import com.xique.park.service.biz.service.IParkInfoBizService;
import com.xique.park.service.service.IParkCarMngtypeService;
import com.xique.park.service.service.IParkGarageService;
import com.xique.park.service.service.IParkLaneService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * @author shd
 * @create 2022/3/14 11:13
 */
@Service
public class ParkInfoBizServiceImpl implements IParkInfoBizService {

    @Autowired
    private IParkGarageService parkGarageService;

    @Autowired
    private IParkCarMngtypeService parkCarMngtypeService;

    @Autowired
    private IParkLaneService parkLaneService;

    @Override
    public AjaxResult initParkInfo(Long parkId) {

        //新增车场生成默认车库
        ParkGarage parkGarage = new ParkGarage();
        parkGarage.setParkId(parkId);
        parkGarage.setName("默认车库");
        parkGarage.setType("0");
        parkGarage.setPid(0L);
        parkGarage.setRecordStatus("normal");
        parkGarage.setStatus("normal");
        parkGarage.setTotalSpace(100L);
        parkGarage.setEmptySpace(0L);
        parkGarage.setCountSpaceMngtype("0");//默认所有车联管理类型都计入
        parkGarageService.insertParkGarage(parkGarage);

        //新增车场生成默认车辆管理类型
//        ParkCarMngtype mngType = new ParkCarMngtype();
//        mngType.setParkId(0L);
//        mngType.setType("1");
//        List<ParkCarMngtype> list = parkCarMngtypeService.selectParkCarMngtypeList(mngType);
//        for(ParkCarMngtype mng : list) {
//            if ("4".equals(mng.getName()) || "月卡车C".equals(mng.getName())){
//                //不生成会员临停车（3.0已废弃）,不生成月卡车C
//                continue;
//            }
//            mng.setParkId(parkId);
//            mng.setUpdateUser(SecurityUtils.getParkId());
//            mng.setCreateUser(SecurityUtils.getParkId());
//            mng.setUpdateTime(new Date());
//            mng.setCreateTime(new Date());
//            parkCarMngtypeService.insertParkCarMngtype(mng);
//        }
        //TODO 未测试，远程调用测试userId是否需要接口传过来
        this.initParkMngType(parkId, parkGarage.getId(), SecurityUtils.getUserId());


        //生成默认一进一出通道
        generateDefaultLanes(parkId, parkGarage.getId());

        return AjaxResult.success();
    }

    private int initParkMngType(Long parkId,Long garageId, Long userId) {
        //默认生成管理类型1：月卡车A
        ParkCarMngtype mngType1 = new ParkCarMngtype();
        mngType1.setMngType("1");
        mngType1.setName("月卡A");
        mngType1.setParkId(parkId);
        mngType1.setType("1");
        mngType1.setCreateUser(userId);
        mngType1.setUpdateUser(userId);
        mngType1.setChargeId(garageId);
        parkCarMngtypeService.insertParkCarMngtype(mngType1);

        //默认生成管理类型2：月卡车B
        ParkCarMngtype mngType2 = new ParkCarMngtype();
        BeanUtils.copyProperties(mngType1, mngType2);
        mngType2.setMngType("1");
        mngType2.setName("月卡B");
        mngType2.setChargeId(garageId);
        parkCarMngtypeService.insertParkCarMngtype(mngType2);

        //默认生成管理类型3：储值车
        ParkCarMngtype mngType3 = new ParkCarMngtype();
        BeanUtils.copyProperties(mngType1, mngType3);
        mngType3.setMngType("2");
        mngType3.setName("储值车");
        mngType3.setChargeId(garageId);
        parkCarMngtypeService.insertParkCarMngtype(mngType3);

        //默认生成管理类型4：访客车
        ParkCarMngtype mngType4 = new ParkCarMngtype();
        BeanUtils.copyProperties(mngType1, mngType4);
        mngType4.setMngType("3");
        mngType4.setName("访客车");
        mngType4.setChargeId(garageId);
        parkCarMngtypeService.insertParkCarMngtype(mngType4);

        //默认生成管理类型5：访客车
        ParkCarMngtype mngType5 = new ParkCarMngtype();
        BeanUtils.copyProperties(mngType1, mngType5);
        mngType5.setMngType("10");
        mngType5.setName("VIP车");
        mngType5.setChargeId(garageId);
        parkCarMngtypeService.insertParkCarMngtype(mngType5);

        //默认生成管理类型6：访客车
        ParkCarMngtype mngType6 = new ParkCarMngtype();
        BeanUtils.copyProperties(mngType1, mngType6);
        mngType6.setMngType("9");
        mngType6.setName("黑名单");
        mngType6.setChargeId(garageId);
        parkCarMngtypeService.insertParkCarMngtype(mngType6);

        //默认生成管理类型7：访客车
        ParkCarMngtype mngType7 = new ParkCarMngtype();
        BeanUtils.copyProperties(mngType1, mngType7);
        mngType7.setMngType("5");
        mngType7.setName("临停车");
        mngType7.setChargeId(garageId);
        parkCarMngtypeService.insertParkCarMngtype(mngType7);

        return 1;
    }

    /**
     * 生成默认一进一出通道
     *
     * @param parkId
     * @param garageId
     */
    private void generateDefaultLanes(Long parkId, Long garageId) {
        ParkLane parkLane = new ParkLane();
        parkLane.setParkId(parkId);
        parkLane.setGarageId(garageId);
        parkLane.setModel("1");
        parkLane.setName("入口通道");
        parkLane.setLaneType("1");
        parkLane.setIsQrcode("N");
        /** 新增默认配置 */
        //通道新添加的属性都以json格式统一放到remark字段；避免数据表一直增加字段
        JSONObject remarkObj = new JSONObject();
        remarkObj.put("internetType", "1");
        remarkObj.put("picPixel", 9);
        remarkObj.put("isRemoteVideo", "N");
        parkLane.setRemark(remarkObj.toJSONString());
        /**通道配置，上面的几个配置，后面也可统一加到config字段中*/
        JSONObject configObj = new JSONObject();
        configObj.put("isFake", "N");
        configObj.put("fakeTime", "06:30-18:30");
        configObj.put("isFreeScan", "0");
        configObj.put("isPayPass", "N");
        parkLane.setConfig(configObj.toJSONString());

        parkLaneService.insertParkLane(parkLane);
        parkLane.setName("出口通道");
        parkLane.setLaneType("2");
        parkLaneService.insertParkLane(parkLane);
    }
}
